package com.ks.api.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ks.api.entity.KsUserCostSummary;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 用户成本汇总数据Mapper接口
 */
@Mapper
public interface KsUserCostSummaryMapper extends BaseMapper<KsUserCostSummary> {
    
    /**
     * 根据用户ID查询成本汇总数据（分页）
     */
    @Select("<script>" +
            "SELECT * FROM ks_user_cost_summary " +
            "WHERE 1=1 " +
            "<if test='nickId != null and nickId != \"\"'>" +
            "   AND nick_id = #{nickId} " +
            "</if>" +
            "<if test='nickName != null and nickName != \"\"'>" +
            "   AND nick_name LIKE CONCAT('%', #{nickName}, '%') " +
            "</if>" +
            "ORDER BY create_time DESC" +
            "</script>")
    IPage<KsUserCostSummary> findByUser(Page<?> page,
            @Param("nickId") String nickId,
            @Param("nickName") String nickName);

    /**
     * 查询用户成本汇总数据（包含用户信息和事件数据）
     * 
     * @param page 分页参数
     * @param nickId 用户昵称ID
     * @param nickname 用户昵称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 分页结果
     */
    Page<KsUserCostSummary> findCostSummariesWithUserInfo(
            Page<KsUserCostSummary> page,
            @Param("nickId") String nickId,
            @Param("nickname") String nickname,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime
    );

    /**
     * 获取今日成本汇总数据
     * @param nickId 用户昵称ID
     * @param nickName 用户昵称
     * @return 统计数据
     */
    Map<String, Object> getTodayCostSummaries(@Param("nickId") String nickId, @Param("nickName") String nickName);

    /**
     * 获取昨日成本汇总数据
     * @param nickId 用户昵称ID
     * @param nickName 用户昵称
     * @return 统计数据
     */

    Map<String, Object> getYesterdayCostSummaries(@Param("nickId") String nickId, @Param("nickName") String nickName);

    /**
     * 获取本周成本汇总数据
     * @param nickId 用户昵称ID
     * @param nickName 用户昵称
     * @return 统计数据
     */

    Map<String, Object> getWeekCostSummaries(@Param("nickId") String nickId, @Param("nickName") String nickName);

    /**
     * 获取本月成本汇总数据
     * @param nickId 用户昵称ID
     * @param nickName 用户昵称
     * @return 统计数据
     */

    Map<String, Object> getMonthCostSummaries(@Param("nickId") String nickId, @Param("nickName") String nickName);

    /**
     * 查询事件搜索数据
     * @param page 分页对象
     * @param nickId 用户ID
     * @param nickname 用户昵称
     * @return 分页结果
     */
    Page<KsUserCostSummary> findEventSearchSummaries(Page<KsUserCostSummary> page, 
            @Param("nickId") String nickId, 
            @Param("nickname") String nickname);

    /**
     * 获取事件搜索统计数据
     * @param nickId 用户ID
     * @param nickname 用户昵称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计数据
     */
    Map<String, Object> getEventSearchStats(
            @Param("nickId") String nickId,
            @Param("nickname") String nickname,
            @Param("startTime") String startTime,
            @Param("endTime") String endTime);

    /**
     * 根据openId列表查询成本汇总数据（分页）
     */
    Page<KsUserCostSummary> findCostSummariesByOpenIds(
        Page<KsUserCostSummary> page,
        @Param("openIds") List<String> openIds
    );

    /**
     * 根据openId列表获取指定时间段的统计数据
     */
    Map<String, Object> getCostSummariesByOpenIds(
        @Param("openIds") List<String> openIds,
        @Param("timeRange") String timeRange
    );
} 